<!doctype html><html lang=en dir=auto><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>制作Sqlcipher+SM4加密的framework包（OC） | wenbin</title><meta name=keywords content="Objective-C,iOS开发杂货"><meta name=description content="项目中集成OpenSSL有时让人头疼，并且网上没有找到使用SM4加密数据库的案例，本文主要讲如何制作一个使用Sqlicipher+SM4国密算法的framework，本文编译部分按需求编译模拟器或真机版本
第一步 下载所需文件 GMSSL：支持国密SM2/SM3/SM4算法的OpenSSL分支，由北京大学密码研究小组维护。 GMSSL for Github
下载后的压缩包解压，使用终端cd到文件夹
输入命令 参考GMSSL编译iPhone OS目标文件
export CC=clang export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer export CROSS_SDK=iPhoneOS.sdk export PATH=&#34;/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH&#34; ./Configure ios64-cross no-shared --prefix=/usr/local/openssl-ios64 make 解压完后文件夹里会多两个.a文件，后面用到的有图示3个文件 第二步 新建一个项目选framework pod init
pod 'FMDB/SQLCipher' pod 'OpenSSL-Universal', '~> 1.0.2.13' 也可以使用 pod 'OpenSSL' 但是可能会报错&mldr;
至此，项目中有加密框架SQLCipher和不支持SM4的低版本OpenSSL
第三步 替换OpenSSL框架内的文件
将GMSSL编译后的如上图所示的3个文件依次替换项目中的文件
将 lib-ios 文件夹中的两个.a文件替换 将 include-ios 文件夹中的 openssl文件夹替换，替换成上图GMSSL编译后 include 文件夹中的 openssl 文件夹 Command+B 编译
可能会报错，因为openssl不支持bitcode，所以关闭项目中的bitcode检测 再次 Command+B 编译 应该顺利通过
至此，项目中所需的所有文件都有了，还需要改动一小下
第四步 打开项目中 sqlite3.c 文件 搜索 aes-256-cbc 替换成 sm4-cbc，有两处 整个项目搜索 SQLCIPHER_CRYPTO_CC 把除了 sqlite3."><meta name=author content><link rel=canonical href=https://imwenbin.com/blog/%E5%88%B6%E4%BD%9Csqlcipher+sm4%E5%8A%A0%E5%AF%86%E7%9A%84framework%E5%8C%85oc/><meta name=google-site-verification content="XYZabc"><meta name=yandex-verification content="XYZabc"><meta name=msvalidate.01 content="XYZabc"><link rel=icon href=https://imwenbin.com/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://imwenbin.com/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://imwenbin.com/favicon-32x32.png><link rel=icon type=image/png sizes=400x400 href=https://imwenbin.com/favicon-400x400.png><link rel=icon type=image/png sizes=512x512 href=https://imwenbin.com/favicon-512x512.png><link rel=apple-touch-icon href=https://imwenbin.com/apple-touch-icon.png><link rel=apple-touch-icon sizes=57x57 href=https://imwenbin.com/apple-touch-icon-57x57.png><link rel=apple-touch-icon sizes=60x60 href=https://imwenbin.com/apple-touch-icon-60x60.png><link rel=apple-touch-icon sizes=72x72 href=https://imwenbin.com/apple-touch-icon-72x72.png><link rel=apple-touch-icon sizes=76x76 href=https://imwenbin.com/apple-touch-icon-76x76.png><link rel=apple-touch-icon sizes=114x114 href=https://imwenbin.com/apple-touch-icon-114x114.png><link rel=apple-touch-icon sizes=120x120 href=https://imwenbin.com/apple-touch-icon-120x120.png><link rel=apple-touch-icon sizes=144x144 href=https://imwenbin.com/apple-touch-icon-144x144.png><link rel=apple-touch-icon sizes=152x152 href=https://imwenbin.com/apple-touch-icon-152x152.png><link rel=apple-touch-icon sizes=180x180 href=https://imwenbin.com/apple-touch-icon-180x180.png><link rel=mask-icon href=https://imwenbin.com/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link crossorigin=anonymous href=/assets/css/stylesheet.min.css rel="preload stylesheet" as=style><script defer crossorigin=anonymous src=/assets/js/highlight.min.js onload=hljs.initHighlightingOnLoad()></script><meta name=generator content="Hugo 0.104.3"><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--hljs-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:title" content="制作Sqlcipher+SM4加密的framework包（OC）"><meta property="og:description" content="项目中集成OpenSSL有时让人头疼，并且网上没有找到使用SM4加密数据库的案例，本文主要讲如何制作一个使用Sqlicipher+SM4国密算法的framework，本文编译部分按需求编译模拟器或真机版本
第一步 下载所需文件 GMSSL：支持国密SM2/SM3/SM4算法的OpenSSL分支，由北京大学密码研究小组维护。 GMSSL for Github
下载后的压缩包解压，使用终端cd到文件夹
输入命令 参考GMSSL编译iPhone OS目标文件
export CC=clang export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer export CROSS_SDK=iPhoneOS.sdk export PATH=&#34;/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH&#34; ./Configure ios64-cross no-shared --prefix=/usr/local/openssl-ios64 make 解压完后文件夹里会多两个.a文件，后面用到的有图示3个文件 第二步 新建一个项目选framework pod init
pod 'FMDB/SQLCipher' pod 'OpenSSL-Universal', '~> 1.0.2.13' 也可以使用 pod 'OpenSSL' 但是可能会报错&mldr;
至此，项目中有加密框架SQLCipher和不支持SM4的低版本OpenSSL
第三步 替换OpenSSL框架内的文件
将GMSSL编译后的如上图所示的3个文件依次替换项目中的文件
将 lib-ios 文件夹中的两个.a文件替换 将 include-ios 文件夹中的 openssl文件夹替换，替换成上图GMSSL编译后 include 文件夹中的 openssl 文件夹 Command+B 编译
可能会报错，因为openssl不支持bitcode，所以关闭项目中的bitcode检测 再次 Command+B 编译 应该顺利通过
至此，项目中所需的所有文件都有了，还需要改动一小下
第四步 打开项目中 sqlite3.c 文件 搜索 aes-256-cbc 替换成 sm4-cbc，有两处 整个项目搜索 SQLCIPHER_CRYPTO_CC 把除了 sqlite3."><meta property="og:type" content="article"><meta property="og:url" content="https://imwenbin.com/blog/%E5%88%B6%E4%BD%9Csqlcipher+sm4%E5%8A%A0%E5%AF%86%E7%9A%84framework%E5%8C%85oc/"><meta property="article:section" content="Blog"><meta property="article:published_time" content="2021-11-18T09:27:03+08:00"><meta property="article:modified_time" content="2021-11-18T09:27:03+08:00"><meta property="og:site_name" content="wenbin"><meta name=twitter:card content="summary"><meta name=twitter:title content="制作Sqlcipher+SM4加密的framework包（OC）"><meta name=twitter:description content="项目中集成OpenSSL有时让人头疼，并且网上没有找到使用SM4加密数据库的案例，本文主要讲如何制作一个使用Sqlicipher+SM4国密算法的framework，本文编译部分按需求编译模拟器或真机版本
第一步 下载所需文件 GMSSL：支持国密SM2/SM3/SM4算法的OpenSSL分支，由北京大学密码研究小组维护。 GMSSL for Github
下载后的压缩包解压，使用终端cd到文件夹
输入命令 参考GMSSL编译iPhone OS目标文件
export CC=clang export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer export CROSS_SDK=iPhoneOS.sdk export PATH=&#34;/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH&#34; ./Configure ios64-cross no-shared --prefix=/usr/local/openssl-ios64 make 解压完后文件夹里会多两个.a文件，后面用到的有图示3个文件 第二步 新建一个项目选framework pod init
pod 'FMDB/SQLCipher' pod 'OpenSSL-Universal', '~> 1.0.2.13' 也可以使用 pod 'OpenSSL' 但是可能会报错&mldr;
至此，项目中有加密框架SQLCipher和不支持SM4的低版本OpenSSL
第三步 替换OpenSSL框架内的文件
将GMSSL编译后的如上图所示的3个文件依次替换项目中的文件
将 lib-ios 文件夹中的两个.a文件替换 将 include-ios 文件夹中的 openssl文件夹替换，替换成上图GMSSL编译后 include 文件夹中的 openssl 文件夹 Command+B 编译
可能会报错，因为openssl不支持bitcode，所以关闭项目中的bitcode检测 再次 Command+B 编译 应该顺利通过
至此，项目中所需的所有文件都有了，还需要改动一小下
第四步 打开项目中 sqlite3.c 文件 搜索 aes-256-cbc 替换成 sm4-cbc，有两处 整个项目搜索 SQLCIPHER_CRYPTO_CC 把除了 sqlite3."><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Blogs","item":"https://imwenbin.com/blog/"},{"@type":"ListItem","position":2,"name":"制作Sqlcipher+SM4加密的framework包（OC）","item":"https://imwenbin.com/blog/%E5%88%B6%E4%BD%9Csqlcipher+sm4%E5%8A%A0%E5%AF%86%E7%9A%84framework%E5%8C%85oc/"}]}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"BlogPosting","headline":"制作Sqlcipher+SM4加密的framework包（OC）","name":"制作Sqlcipher\u002bSM4加密的framework包（OC）","description":"项目中集成OpenSSL有时让人头疼，并且网上没有找到使用SM4加密数据库的案例，本文主要讲如何制作一个使用Sqlicipher+SM4国密算法的framework，本文编译部分按需求编译模拟器或真机版本\n第一步 下载所需文件 GMSSL：支持国密SM2/SM3/SM4算法的OpenSSL分支，由北京大学密码研究小组维护。 GMSSL for Github\n下载后的压缩包解压，使用终端cd到文件夹\n输入命令 参考GMSSL编译iPhone OS目标文件\nexport CC=clang export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer export CROSS_SDK=iPhoneOS.sdk export PATH=\u0026#34;/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH\u0026#34; ./Configure ios64-cross no-shared --prefix=/usr/local/openssl-ios64 make 解压完后文件夹里会多两个.a文件，后面用到的有图示3个文件 第二步 新建一个项目选framework pod init\npod \u0026#39;FMDB/SQLCipher\u0026#39; pod \u0026#39;OpenSSL-Universal\u0026#39;, \u0026#39;~\u0026gt; 1.0.2.13\u0026#39; 也可以使用 pod 'OpenSSL' 但是可能会报错\u0026hellip;\n至此，项目中有加密框架SQLCipher和不支持SM4的低版本OpenSSL\n第三步 替换OpenSSL框架内的文件\n将GMSSL编译后的如上图所示的3个文件依次替换项目中的文件\n将 lib-ios 文件夹中的两个.a文件替换 将 include-ios 文件夹中的 openssl文件夹替换，替换成上图GMSSL编译后 include 文件夹中的 openssl 文件夹 Command+B 编译\n可能会报错，因为openssl不支持bitcode，所以关闭项目中的bitcode检测 再次 Command+B 编译 应该顺利通过\n至此，项目中所需的所有文件都有了，还需要改动一小下\n第四步 打开项目中 sqlite3.c 文件 搜索 aes-256-cbc 替换成 sm4-cbc，有两处 整个项目搜索 SQLCIPHER_CRYPTO_CC 把除了 sqlite3.","keywords":["Objective-C","iOS开发杂货"],"articleBody":" 项目中集成OpenSSL有时让人头疼，并且网上没有找到使用SM4加密数据库的案例，本文主要讲如何制作一个使用Sqlicipher+SM4国密算法的framework，本文编译部分按需求编译模拟器或真机版本\n第一步 下载所需文件 GMSSL：支持国密SM2/SM3/SM4算法的OpenSSL分支，由北京大学密码研究小组维护。 GMSSL for Github\n下载后的压缩包解压，使用终端cd到文件夹\n输入命令 参考GMSSL编译iPhone OS目标文件\nexport CC=clang export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer export CROSS_SDK=iPhoneOS.sdk export PATH=\"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH\" ./Configure ios64-cross no-shared --prefix=/usr/local/openssl-ios64 make 解压完后文件夹里会多两个.a文件，后面用到的有图示3个文件 第二步 新建一个项目选framework pod init\npod 'FMDB/SQLCipher' pod 'OpenSSL-Universal', '~\u003e 1.0.2.13' 也可以使用 pod 'OpenSSL' 但是可能会报错…\n至此，项目中有加密框架SQLCipher和不支持SM4的低版本OpenSSL\n第三步 替换OpenSSL框架内的文件\n将GMSSL编译后的如上图所示的3个文件依次替换项目中的文件\n将 lib-ios 文件夹中的两个.a文件替换 将 include-ios 文件夹中的 openssl文件夹替换，替换成上图GMSSL编译后 include 文件夹中的 openssl 文件夹 Command+B 编译\n可能会报错，因为openssl不支持bitcode，所以关闭项目中的bitcode检测 再次 Command+B 编译 应该顺利通过\n至此，项目中所需的所有文件都有了，还需要改动一小下\n第四步 打开项目中 sqlite3.c 文件 搜索 aes-256-cbc 替换成 sm4-cbc，有两处 整个项目搜索 SQLCIPHER_CRYPTO_CC 把除了 sqlite3.c 文件中的地方全部替换成 SQLCIPHER_CRYPTO_OPENSSL sqlite3.c 文件不要替换\n至此，一个带有SM4的加密模块就做完了，接下来编译打包，根据自己的需求。\n第五步 将打的包复制出来，拖到项目中，运行会崩溃\n在此导入xxx.framework后方可运行 顺利运行，完毕。\n如果有需要封装到framework中，网上有很多帖子可以借鉴\n附录： 其实逻辑很简单，sqlcipher负责加密，openssl负责提供算法，GMSSL编译后其实文件都已经全了，但是集成OpenSSL可能会有各种问题，所以使用pod导入openssl省心，导入后文件在本地了，替换里面的文件即可，然后就是将sqlcipher中的aes-256替换成sm4，本文也是折腾了两天找到一个比较合适的办法，分享给有相同需求的同学们。\n","wordCount":"86","inLanguage":"en","datePublished":"2021-11-18T09:27:03+08:00","dateModified":"2021-11-18T09:27:03+08:00","mainEntityOfPage":{"@type":"WebPage","@id":"https://imwenbin.com/blog/%E5%88%B6%E4%BD%9Csqlcipher+sm4%E5%8A%A0%E5%AF%86%E7%9A%84framework%E5%8C%85oc/"},"publisher":{"@type":"Organization","name":"wenbin","logo":{"@type":"ImageObject","url":"https://imwenbin.com/favicon.ico"}}}</script></head><body id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=https://imwenbin.com/ accesskey=h title="wenbin (Alt + H)">wenbin</a>
<span class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></span></div><ul id=menu><li><a href=https://imwenbin.com/blog/ title=Blog><span>Blog</span></a></li><li><a href=https://imwenbin.com/archives title=Archive><span>Archive</span></a></li><li><a href=https://imwenbin.com/tags title=Tags><span>Tags</span></a></li></ul></nav></header><main class=main><article class=post-single><header class=post-header><div class=breadcrumbs><a href=https://imwenbin.com/>Home</a>&nbsp;»&nbsp;<a href=https://imwenbin.com/blog/>Blogs</a></div><h1 class=post-title>制作Sqlcipher+SM4加密的framework包（OC）</h1><div class=post-meta><span title='2021-11-18 09:27:03 +0800 CST'>⌚️ 2021-11-18</span></div></header><div class=toc><details><summary accesskey=c title="(Alt + C)"><span class=details>目录</span></summary><div class=inner><ul><li><a href=#%e7%ac%ac%e4%b8%80%e6%ad%a5 aria-label=第一步>第一步</a></li><li><a href=#%e7%ac%ac%e4%ba%8c%e6%ad%a5 aria-label=第二步>第二步</a></li><li><a href=#%e7%ac%ac%e4%b8%89%e6%ad%a5 aria-label=第三步>第三步</a></li><li><a href=#%e7%ac%ac%e5%9b%9b%e6%ad%a5 aria-label=第四步>第四步</a></li><li><a href=#%e7%ac%ac%e4%ba%94%e6%ad%a5 aria-label=第五步>第五步</a></li></ul></div></details></div><div class=post-content><blockquote><p>项目中集成OpenSSL有时让人头疼，并且网上没有找到使用SM4加密数据库的案例，本文主要讲如何制作一个使用Sqlicipher+SM4国密算法的framework，本文编译部分按需求编译模拟器或真机版本</p></blockquote><h2 id=第一步>第一步<a hidden class=anchor aria-hidden=true href=#第一步>#</a></h2><p>下载所需文件
GMSSL：支持国密SM2/SM3/SM4算法的OpenSSL分支，由<a href=http://infosec.pku.edu.cn/>北京大学密码研究小组</a>维护。
<a href=https://github.com/guanzhi/GmSSL>GMSSL for Github</a></p><p>下载后的压缩包解压，使用终端cd到文件夹</p><p>输入命令 参考<a href=http://gmssl.org/docs/install.html>GMSSL编译iPhone OS目标文件</a></p><pre tabindex=0><code>export CC=clang
export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
export CROSS_SDK=iPhoneOS.sdk
export PATH=&#34;/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH&#34;
./Configure ios64-cross no-shared --prefix=/usr/local/openssl-ios64
make
</code></pre><p>解压完后文件夹里会多两个.a文件，后面用到的有图示3个文件
<img loading=lazy src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMjQwNzk5Mi02ZDA5NTU4NDEyYjcxNmI5LnBuZw?x-oss-process=image/format,png" alt=后面会用到GMSSL编译后的3个文件></p><h2 id=第二步>第二步<a hidden class=anchor aria-hidden=true href=#第二步>#</a></h2><p>新建一个项目选framework
<img loading=lazy src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMjQwNzk5Mi1mOTE3ZDA1NmY3YzM1NGRiLnBuZw?x-oss-process=image/format,png" alt=新建framework项目></p><p><code>pod init</code></p><pre tabindex=0><code>pod &#39;FMDB/SQLCipher&#39;
pod &#39;OpenSSL-Universal&#39;, &#39;~&gt; 1.0.2.13&#39;
</code></pre><p>也可以使用 <code>pod 'OpenSSL'</code> 但是可能会报错&mldr;</p><p>至此，项目中有加密框架SQLCipher和不支持SM4的低版本OpenSSL</p><h2 id=第三步>第三步<a hidden class=anchor aria-hidden=true href=#第三步>#</a></h2><p>替换OpenSSL框架内的文件</p><p>将GMSSL编译后的如上图所示的3个文件依次替换项目中的文件</p><p><img loading=lazy src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMjQwNzk5Mi01Y2EyZGQzZjljZDc2OWEzLnBuZw?x-oss-process=image/format,png" alt="show in Finder"></p><ol><li>将 <code>lib-ios</code> 文件夹中的两个.a文件替换</li><li>将 <code>include-ios</code> 文件夹中的 <code>openssl</code>文件夹替换，替换成上图GMSSL编译后 <code>include</code> 文件夹中的 <code>openssl</code> 文件夹</li></ol><p><code>Command+B</code> 编译</p><p>可能会报错，因为openssl不支持bitcode，所以关闭项目中的bitcode检测
<img loading=lazy src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMjQwNzk5Mi03ZmM0MjYwZDZkMDdlODhjLnBuZw?x-oss-process=image/format,png" alt=关闭bitcode></p><p>再次 <code>Command+B</code> 编译 应该顺利通过</p><p>至此，项目中所需的所有文件都有了，还需要改动一小下</p><h2 id=第四步>第四步<a hidden class=anchor aria-hidden=true href=#第四步>#</a></h2><p>打开项目中 <code>sqlite3.c</code> 文件
<img loading=lazy src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMjQwNzk5Mi1mNjAzNjQ4M2Q3YzQ4MTgzLnBuZw?x-oss-process=image/format,png" alt=sqlite3.c文件></p><ol><li>搜索 <code>aes-256-cbc</code> 替换成 <code>sm4-cbc</code>，有两处</li><li>整个项目搜索 <code>SQLCIPHER_CRYPTO_CC</code> 把除了 <code>sqlite3.c</code> 文件中的地方全部替换成 <code>SQLCIPHER_CRYPTO_OPENSSL</code>
<img loading=lazy src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMjQwNzk5Mi0zYmQzNjRiYjg3YTlkMmY0LnBuZw?x-oss-process=image/format,png" alt=前面的D保留></li></ol><p><strong><code>sqlite3.c</code> 文件不要替换</strong></p><p>至此，一个带有SM4的加密模块就做完了，接下来编译打包，根据自己的需求。</p><h2 id=第五步>第五步<a hidden class=anchor aria-hidden=true href=#第五步>#</a></h2><p>将打的包复制出来，拖到项目中，运行会崩溃</p><p>在此导入xxx.framework后方可运行
<img loading=lazy src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xMjQwNzk5Mi1jZTA0Y2RhYWY5ZjI1NDliLnBuZw?x-oss-process=image/format,png" alt="target -&amp;gt; general -&amp;gt; embedded binaries"></p><p>顺利运行，完毕。</p><blockquote><p>如果有需要封装到framework中，网上有很多帖子可以借鉴</p></blockquote><p>附录：
其实逻辑很简单，sqlcipher负责加密，openssl负责提供算法，GMSSL编译后其实文件都已经全了，但是集成OpenSSL可能会有各种问题，所以使用pod导入openssl省心，导入后文件在本地了，替换里面的文件即可，然后就是将sqlcipher中的aes-256替换成sm4，本文也是折腾了两天找到一个比较合适的办法，分享给有相同需求的同学们。</p></div><footer class=post-footer><ul class=post-tags><li><a href=https://imwenbin.com/tags/objective-c/>Objective-C</a></li><li><a href=https://imwenbin.com/tags/ios%E5%BC%80%E5%8F%91%E6%9D%82%E8%B4%A7/>iOS开发杂货</a></li></ul><nav class=paginav><a class=prev href=https://imwenbin.com/blog/xcode%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E5%BC%95%E5%85%A5pod%E6%96%87%E4%BB%B6%E6%8A%A5%E9%94%99%E6%89%BE%E4%B8%8D%E5%88%B0/><span class=title>« Prev Page</span><br><span>Xcode单元测试引入pod文件报错找不到</span></a>
<a class=next href=https://imwenbin.com/blog/bandwagon%E5%B0%81%E5%90%8E%E6%93%8D%E4%BD%9C/><span class=title>Next Page »</span><br><span>bandwagon封后操作</span></a></nav></footer></article></main><footer class=footer><span>&copy; 2023 <a href=https://imwenbin.com/>wenbin</a>.</span>
<span>保留部分权利。</span>
<span><a href=https://beian.miit.gov.cn>津ICP备2021008823号</a></span>
<span style="width:300px;margin:0 auto;padding:20px 0"><a target=_blank href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=12010302002359" style=display:inline-block;text-decoration:none;height:20px;line-height:20px><img src=/备案图标.png style=float:left;width:16px><p>津公网安备 12010302002359号</p></a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentcolor"><path d="M12 6H0l6-6z"/></svg></a><script>let menu=document.getElementById("menu");menu&&(menu.scrollLeft=localStorage.getItem("menu-scroll-position"),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}),document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{document.body.className.includes("dark")?(document.body.classList.remove("dark"),localStorage.setItem("pref-theme","light")):(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))})</script><script>document.querySelectorAll("pre > code").forEach(e=>{const n=e.parentNode.parentNode,t=document.createElement("button");t.classList.add("copy-code"),t.innerText="copy";function s(){t.innerText="copied!",setTimeout(()=>{t.innerText="copy"},2e3)}t.addEventListener("click",t=>{if("clipboard"in navigator){navigator.clipboard.writeText(e.textContent),s();return}const n=document.createRange();n.selectNodeContents(e);const o=window.getSelection();o.removeAllRanges(),o.addRange(n);try{document.execCommand("copy"),s()}catch{}o.removeRange(n)}),n.classList.contains("highlight")?n.appendChild(t):n.parentNode.firstChild==n||(e.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName=="TABLE"?e.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(t):e.parentNode.appendChild(t))})</script></body></html>